--/
/*
流水号存储过程
@ddlResult 返回结果为 0 表示数据库添加或修改失败
@numFormat 返回结果为 -1 表示流水号已达到编码段长度的最大值
*/
CREATE PROCEDURE sp_querySerialNum
        @serialNumber varchar(50),--流水号code
        @codeRuleCode varchar(50),--编码规则code
        @createBy varchar(50),--创建人
        @updateBy varchar(50),--修改人
        @ddlResult varchar(5) output,--返回数据库操作结果
        @swiftNum varchar(50) output,--返回的查询流水号
        @numFormat varchar(5) output --返回流水号是否到最大值结果
        as
        declare @num varchar(50) --当前流水号
       --查询当前流水号是否有数据
       select @num=numberCurrentValue  from s_serialNumber_info where status = '1' and code = @serialNumber
       print @num
       print '@num'
       if(@num != '' )--当前流水号code无流水号
       begin
                print '1111111'
                declare @max int  --当前流水号能达到的最大值
                select @max = cast(replicate('9',len(@num)) as int)
                print @max
                declare @currentV int--流水号增加
                select @currentV = cast(@num as int) + 1
                if(@currentV <= @max)--判断当前流水号code 的流水号是否超过流水号长度
                begin
                        select @swiftNum = stuff(cast(@currentV as varchar(100)),1,0,replicate('0',( len(@num) - len( cast(@currentV as varchar(100)) ) ) ) )
                        --修改流水号数据库表信息
                        update s_serialNumber_info set numberCurrentValue = @swiftNum,updateBy=@updateBy,updateTime = getDate() where status = '1' and code=@serialNumber
                        if(@@rowcount = 0)
                        begin
                                select @numFormat='',@ddlResult='0'
                        end
                        else
                        begin
                                select @numFormat='',@ddlResult=''
                        end
                end
                else
                begin
                         select @numFormat='-1',@ddlResult='',@swiftNum=''
                end
       end
       else 
       begin
                print @num
                 print '12331231'
                declare @len varchar(20)
                 --查询当前流水号对应得编码规则段的长度
                select @len=length  from s_codeRuleSlave_info where status = '1' and codeRuleCode = @codeRuleCode and generationCode='892f71626ccc4ed9'
                select @swiftNum = stuff('1',1,0,replicate('0',(cast(@len as int)-1) ))
                 --添加到流水号信息数据库表
                insert into s_serialNumber_info (guid,createBy,createTime,updateBy,updateTime,status,code,numberCurrentValue) 
                values(newid(),@createBy,getDate(),@updateBy,getDate(),'1',@serialNumber,@swiftNum)
                if(@@rowcount = 0)--判断数据库操作是否成功
                begin
                        select @numFormat='',@ddlResult='0'
                end
                else
                begin
                        select @numFormat='',@ddlResult=''
                end
       end
/
